home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 418_02 / rasmol2 / molecule.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-02  |  11.0 KB  |  347 lines

  1. /* molecule.h
  2.  * RasMol2 Molecular Graphics
  3.  * Roger Sayle, February 1994
  4.  * Version 2.3
  5.  */
  6.  
  7. #define SerNoFlag 0x01
  8. #define ResNoFlag 0x02
  9.  
  10. typedef struct {
  11.         short radius;
  12.         char  mask[19];
  13.         Byte  flags;
  14.         Byte  r;
  15.         Byte  g;
  16.         Byte  b;
  17.         } MaskDesc;
  18.  
  19. #define MAXMASK 40
  20. #define MAXELEM 180
  21. #define MINELEM 29
  22. #define MAXRES  80
  23. #define MINRES  35
  24.  
  25.  
  26. #define IsAmino(x)       ((x)<=23)
  27. #define IsAminoNucleo(x) ((x)<=27)
  28. #define IsNucleo(x)      (((x)>=24) && ((x)<=27))
  29. #define IsProtein(x)     (((x)<=23) || (((x)>=28) && ((x)<=30)))
  30. #define IsSolvent(x)     (((x)>=31) && ((x)<=34))
  31. #define IsWater(x)       (((x)==31) || ((x)==32))
  32. #define IsIon(x)         (((x)==33) || ((x)==34))
  33.  
  34. #define IsPyrimidine(x)  (IsCytosine(x) || IsThymine(x))
  35. #define IsPurine(x)      (IsAdenine(x) || IsGuanine(x))
  36. #define NucleicCompl(x)  ((x)^3)
  37.  
  38.  
  39. #define IsProline(x)     ((x)==11)
  40. #define IsCysteine(x)    ((x)==17)
  41. #define IsAdenine(x)     ((x)==24)
  42. #define IsCytosine(x)    ((x)==25)
  43. #define IsGuanine(x)     ((x)==26)
  44. #define IsThymine(x)     ((x)==27)
  45.  
  46.  
  47. #define IsAlphaCarbon(x)     ((x)==1)
  48. #define IsSugarPhosphate(x)  ((x)==7)
  49. #define IsAminoBackbone(x)   ((x)<=3)
  50. #define IsShapelyBackbone(x) ((x)<=7)
  51. #define IsNucleicBackbone(x) (((x)>=7) && ((x)<=18))
  52. #define IsShapelySpecial(x)  ((x)==19)
  53. #define IsCysteineSulphur(x) ((x)==20)
  54.  
  55.  
  56. /*=================*/
  57. /*  Database Flags */
  58. /*=================*/
  59.  
  60. #define SelectFlag      0x01
  61. #define DrawBondFlag    0x06
  62. #define AllAtomFlag     0x1c
  63. #define HelixFlag       0x0e
  64.  
  65. /* Atom Flags */
  66. #define SphereFlag      0x02     /* Sphere representation */
  67. #define HeteroFlag      0x04     /* HETATM record         */
  68. #define HydrogenFlag    0x08     /* Hydrogen atom         */
  69. #define NormAtomFlag    0x10
  70. #define NonBondFlag     0x20
  71. #define BreakFlag       0x40     /* Break in backbone     */
  72.  
  73. /* Bond Flags */
  74. #define WireFlag        0x02     /* Depth-cued wireframe         */
  75. #define CylinderFlag    0x04     /* Line/Cylinder representation */
  76. #define HydrBondFlag    0x08     /* Hydrogen *-H bond            */
  77. #define NormBondFlag    0x10
  78. #define DoubBondFlag    0x20
  79. #define AromBondFlag    0x40
  80.  
  81. /* Group Flags */
  82. #define CystineFlag     0x01     /* Disulphide bonded cysteine */
  83. #define Helix3Flag      0x02     /* 3,10-Helix structure       */
  84. #define Helix4Flag      0x04     /* Alpha Helix structure      */
  85. #define Helix5Flag      0x08     /* 5-Helix structure          */
  86. #define SheetFlag       0x10     /* Beta Sheet structure       */
  87. #define TurnFlag        0x20     /* Turn Secondary structure   */
  88. #define RibbonFlag      0x40     /* Ribbon representation      */
  89.  
  90.  
  91. /*=====================*/
  92. /*  Molecule Database  */
  93. /*=====================*/
  94.  
  95. typedef struct _Atom {
  96.         struct _Atom __far *anext;        /* Linked list of atoms  */
  97.         struct _Atom __far *bucket;       /* Sphere Y-Bucket       */
  98.     struct _Atom __far *next;         /* Active Object List    */
  99.         Long xorg, yorg, zorg;            /* World Co-ordinates    */
  100.         short  x, y, z;                   /* Image Co-ordinates    */
  101.         short  radius;                    /* World Radius          */
  102.         short  serno;                     /* Atom Serial Number    */
  103.         short  temp;                      /* Temperature Factor    */
  104.         short  col;                       /* Atom Colour           */
  105.         Byte   refno;                     /* ElemDesc index number */
  106.         Byte   flag;                      /* Database flags        */
  107.         char   altl;                      /* Alternate Location    */
  108.         short  irad;                      /* Image Radius          */
  109.         short  mbox;                      /* Shadow Casting NOnce  */
  110.     } Atom;
  111.  
  112.  
  113. typedef struct _Bond {
  114.         struct _Bond __far *bnext;       /* Linked list of bonds  */
  115.         Atom __far *srcatom;             /* Source Atom Ptr       */
  116.         Atom __far *dstatom;             /* Destination Atom Ptr  */
  117.         short radius;                    /* World Radius          */
  118.         short irad;                      /* Image Radius          */
  119.         short col;                       /* Bond Colour           */
  120.         Byte  flag;                      /* Database flags        */
  121.     } Bond;
  122.  
  123. typedef struct _Group {
  124.         struct _Group __far *gnext;       /* Linked list of groups */
  125.         Atom __far *alist;                /* Linked list of atoms  */
  126.         short serno;                      /* Group serial number   */
  127.         short width;                      /* Ribbon Width          */
  128.         short col;              /* Ribbon Colour         */
  129.         Byte  refno;                      /* Residue index number  */
  130.         Byte  flag;                       /* Database flags        */
  131.     } Group;
  132.  
  133. typedef struct _Chain {
  134.         struct _Chain __far *cnext;       /* Linked list of chains     */
  135.         Group __far *glist;               /* Linked list of groups     */
  136.         Bond __far *blist;                /* Linked list of back bonds */
  137.         char  ident;                      /* Chain identifier          */
  138.     } Chain;
  139.  
  140. typedef struct _HBond {
  141.         struct _HBond __far *hnext;       /* Ordered list of hbonds   */
  142.         Atom __far *srcCA;                /* Source Alpha Carbon      */
  143.         Atom __far *dstCA;                /* Destination Alpha Carbon */
  144.         Atom __far *dst;                  /* Acceptor [=CO] Atom Ptr  */
  145.         Atom __far *src;                  /* Donor [=NH] Atom Ptr     */
  146.         short energy;                     /* Hydrogen bond energy     */
  147.         short radius;                     /* World Radius             */
  148.         short irad;                       /* Image Radius             */
  149.         Char offset;                      /* Signed Offset            */
  150.         Byte flag;                        /* Database flags           */
  151.         Byte col;                         /* Hydrogen bond colour     */
  152.         } HBond;
  153.  
  154. typedef struct _Molecule {
  155.         HBond __far *slist;               /* Linked list of SS bonds  */
  156.         HBond __far *hlist;               /* Linked list of hbonds    */
  157.         Chain __far *clist;               /* Linked list of chains    */
  158.         Bond __far *blist;                /* Linked list of bonds     */
  159.     } Molecule;
  160.  
  161.  
  162.  
  163. #ifdef MOLECULE
  164. /* Avoid SGI Compiler Warnings! */
  165. char Residue[MAXRES][4] = {
  166.     /*===============*/
  167.     /*  Amino Acids  */
  168.     /*===============*/
  169.  
  170. /* Ordered by Cumulative Frequency in Brookhaven *
  171.  * Protein Databank, December 1991               */
  172.  
  173.           "ALA", /* 8.4% */     "GLY", /* 8.3% */
  174.           "LEU", /* 8.0% */     "SER", /* 7.5% */
  175.           "VAL", /* 7.1% */     "THR", /* 6.4% */
  176.           "LYS", /* 5.8% */     "ASP", /* 5.5% */
  177.           "ILE", /* 5.2% */     "ASN", /* 4.9% */
  178.           "GLU", /* 4.9% */     "PRO", /* 4.4% */
  179.           "ARG", /* 3.8% */     "PHE", /* 3.7% */
  180.           "GLN", /* 3.5% */     "TYR", /* 3.5% */
  181.           "HIS", /* 2.3% */     "CYS", /* 2.0% */
  182.           "MET", /* 1.8% */     "TRP", /* 1.4% */
  183.  
  184.           "ASX", "GLX", "PCA", "HYP",
  185.  
  186.     /*===============*/
  187.     /*  Nucleotides  */
  188.     /*===============*/
  189.           "  A", "  C", "  G", "  T",
  190.  
  191.     /*=================*/
  192.     /*  Miscellaneous  */ 
  193.     /*=================*/
  194.           "UNK", "ACE", "FOR", "HOH",
  195.           "DOD", "SO4", "PO4"  };
  196.  
  197.  
  198. /* Avoid SGI Compiler Warnings! */
  199. char ElemDesc[MAXELEM][4] = {
  200.     { ' ', 'N', ' ', ' ' },  /* 0*/
  201.     { ' ', 'C', 'A', ' ' },  /* 1*/
  202.     { ' ', 'C', ' ', ' ' },  /* 2*/
  203.     { ' ', 'O', ' ', ' ' },  /* 3*/   /* 0-3   Amino Acid Backbone    */
  204.     { ' ', 'C', '\'', ' ' }, /* 4*/
  205.     { ' ', 'O', 'T', ' ' },  /* 5*/
  206.     { ' ', 'S', ' ', ' ' },  /* 6*/
  207.     { ' ', 'P', ' ', ' ' },  /* 7*/   /* 4-7   Shapely Amino Backbone */
  208.     { ' ', 'O', '1', 'P' },  /* 8*/
  209.     { ' ', 'O', '2', 'P' },  /* 9*/
  210.     { ' ', 'O', '5', '*' },  /*10*/
  211.     { ' ', 'C', '5', '*' },  /*11*/
  212.     { ' ', 'C', '4', '*' },  /*12*/
  213.     { ' ', 'O', '4', '*' },  /*13*/
  214.     { ' ', 'C', '3', '*' },  /*14*/
  215.     { ' ', 'O', '3', '*' },  /*15*/
  216.     { ' ', 'C', '2', '*' },  /*16*/
  217.     { ' ', 'O', '2', '*' },  /*17*/
  218.     { ' ', 'C', '1', '*' },  /*18*/   /* 7-18  Nucleic Acid Backbone  */
  219.     { ' ', 'C', 'A', '2' },  /*19*/   /* 19    Shapely Special        */
  220.     { ' ', 'S', 'G', ' ' },  /*20*/   /* 20    Cysteine Sulphur       */
  221.     { ' ', 'N', '1', ' ' },  /*21*/
  222.     { ' ', 'N', '2', ' ' },  /*22*/
  223.     { ' ', 'N', '3', ' ' },  /*23*/
  224.     { ' ', 'N', '4', ' ' },  /*24*/
  225.     { ' ', 'N', '6', ' ' },  /*25*/
  226.     { ' ', 'O', '2', ' ' },  /*26*/
  227.     { ' ', 'O', '4', ' ' },  /*27*/
  228.     { ' ', 'O', '6', ' ' }   /*28*/   /* 21-28 Nucleic Acid H-Bonding */
  229.     };
  230.  
  231.  
  232.  
  233. char InfoFileName[80];
  234. char InfoClassification[42];
  235. char InfoMoleculeName[62];
  236. char InfoSpaceGroup[11];
  237. char InfoIdentCode[6];
  238.  
  239. int InfoSSBondCount;
  240. int InfoLadderCount;
  241. int InfoChainCount;
  242. int InfoHBondCount;
  243. int InfoHelixCount;
  244. int InfoTurnCount;
  245. Long InfoBondCount;
  246.  
  247. int MainGroupCount,HetaGroupCount;
  248. Long MainAtomCount; 
  249. int HetaAtomCount;
  250.  
  251. Long MinX, MinY, MinZ;
  252. Long MaxX, MaxY, MaxZ;
  253.  
  254. int MinMainTemp, MaxMainTemp;
  255. int MinHetaTemp, MaxHetaTemp;
  256. int MinMainRes,  MaxMainRes;
  257. int MinHetaRes,  MaxHetaRes;
  258.  
  259. Molecule __far *Database;
  260. MaskDesc UserMask[MAXMASK];
  261. Long MinHBondDist, MaxHBondDist;
  262. Long MinBondDist,  MaxBondDist;
  263. int AbsMaxBondDist;
  264. int ElemNo,ResNo;
  265. int MaskCount;
  266.  
  267. #else
  268. extern char InfoFileName[80];
  269. extern char Residue[MAXRES][4];
  270. extern char ElemDesc[MAXELEM][4];
  271. extern char InfoClassification[42];
  272. extern char InfoMoleculeName[62];
  273. extern char InfoSpaceGroup[11];
  274. extern char InfoIdentCode[6];
  275.  
  276. extern int InfoSSBondCount;
  277. extern int InfoLadderCount;
  278. extern int InfoChainCount;
  279. extern int InfoHBondCount;
  280. extern int InfoHelixCount;
  281. extern int InfoTurnCount;
  282. extern Long InfoBondCount;
  283.  
  284. extern int MainGroupCount,HetaGroupCount;
  285. extern Long MainAtomCount;
  286. extern int HetaAtomCount;
  287.  
  288. extern Long MinX, MinY, MinZ;
  289. extern Long MaxX, MaxY, MaxZ;
  290.  
  291. extern int MinMainTemp, MaxMainTemp;
  292. extern int MinHetaTemp, MaxHetaTemp;
  293. extern int MinMainRes,  MaxMainRes;
  294. extern int MinHetaRes,  MaxHetaRes;
  295.  
  296. extern Molecule __far *Database;
  297. extern MaskDesc UserMask[MAXMASK];
  298. extern Long MinHBondDist, MaxHBondDist;
  299. extern Long MinBondDist,  MaxBondDist;
  300. extern int AbsMaxBondDist;
  301. extern int ElemNo,ResNo;
  302. extern int MaskCount;
  303.  
  304. #ifdef __STDC__
  305. int LoadAlchemyMolecule( FILE* );
  306. int LoadPDBMolecule( FILE* );
  307. int LoadXYZMolecule( FILE* );
  308.  
  309. int SaveAlchemyMolecule( char* );
  310. int SavePDBMolecule( char* );
  311. int SaveXYZMolecule( char* );
  312.  
  313. void CreateMoleculeBonds( int );
  314. void FindDisulphideBridges();
  315. void CalcHydrogenBonds();
  316. void DetermineStructure();
  317. void RenumberMolecule( int );
  318. void InitialiseDatabase();
  319. void DescribeMolecule();
  320. void DestroyDatabase();
  321.  
  322. Atom __far *FindGroupAtom( Group __far*, int );
  323.  
  324. #else /* non-ANSI C compiler */
  325. int LoadAlchemyMolecule();
  326. int LoadPDBMolecule();
  327. int LoadXYZMolecule();
  328.  
  329. int SaveAlchemyMolecule();
  330. int SavePDBMolecule();
  331. int SaveXYZMolecule();
  332.  
  333. void CreateMoleculeBonds();
  334. void FindDisulphideBridges();
  335. void CalcHydrogenBonds();
  336. void DetermineStructure();
  337. void RenumberMolecule();
  338. void InitialiseDatabase();
  339. void DescribeMolecule();
  340. void DestroyDatabase();
  341.  
  342. Atom __far *FindGroupAtom();
  343.  
  344. #endif
  345. #endif
  346.  
  347.